/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GachNo;
 
/**
 *
 * @author Admin
 */
public class Base64 {
    static byte[] encodeData;
    static String charSet =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    static {
        encodeData = new byte[64];
    for (int i = 0; i<64; i++) {
        byte c = (byte) charSet.charAt(i);
        encodeData[i] = c;
    }
    }

    private Base64() {}

    /**
     * base-64 encode a string
     * @param s     The ascii string to encode
     * @returns     The base64 encoded result
     */

    public static String
    encode(String s) {
        return encode(s.getBytes());
    }

    /**
     * base-64 encode a byte array
     * @param src   The byte array to encode
     * @returns     The base64 encoded result
     */

    public static String
    encode(byte[] src) {
    return encode(src, 0, src.length);
    }

    /**
     * base-64 encode a byte array
     * @param src   The byte array to encode
     * @param start The starting index
     * @param len   The number of bytes
     * @returns     The base64 encoded result
     */

    public static String
    encode(byte[] src, int start, int length) {
        byte[] dst = new byte[(length+2)/3 * 4 + length/72];
        int x = 0;
        int dstIndex = 0;
        int state = 0;  // which char in pattern
        int old = 0;    // previous byte
        int len = 0;    // length decoded so far
    int max = length + start;
        for (int srcIndex = start; srcIndex<max; srcIndex++) {
        x = src[srcIndex];
        switch (++state) {
        case 1:
            dst[dstIndex++] = encodeData[(x>>2) & 0x3f];
        break;
        case 2:
            dst[dstIndex++] = encodeData[((old<<4)&0x30) 
                | ((x>>4)&0xf)];
        break;
        case 3:
            dst[dstIndex++] = encodeData[((old<<2)&0x3C) 
                | ((x>>6)&0x3)];
        dst[dstIndex++] = encodeData[x&0x3F];
        state = 0;
        break;
        }
        old = x;
        if (++len >= 72) {
            dst[dstIndex++] = (byte) '\n';
            len = 0;
        }
    }

    /*
     * now clean up the end bytes
     */

    switch (state) {
    case 1: dst[dstIndex++] = encodeData[(old<<4) & 0x30];
       dst[dstIndex++] = (byte) '=';
       dst[dstIndex++] = (byte) '=';
       break;
    case 2: dst[dstIndex++] = encodeData[(old<<2) & 0x3c];
       dst[dstIndex++] = (byte) '=';
       break;
    }
    return new String(dst);
    }

    /**
     * A Base64 decoder.  This implementation is slow, and 
     * doesn't handle wrapped lines.
     * The output is undefined if there are errors in the input.
     * @param s     a Base64 encoded string
     * @returns     The byte array eith the decoded result
     */

    public static byte[]
    decode(String s) {
      int end = 0;  // end state
      if (s.endsWith("=")) {
      end++;
      }
      if (s.endsWith("==")) {
      end++;
      }
      int len = (s.length() + 3)/4 * 3 - end;
      byte[] result = new byte[len];
      int dst = 0;
      try {
      for(int src = 0; src< s.length(); src++) {
          int code =  charSet.indexOf(s.charAt(src));
          if (code == -1) {
              break;
          }
          switch (src%4) {
          case 0:
              result[dst] = (byte) (code<<2);
              break;
          case 1: 
              result[dst++] |= (byte) ((code>>4) & 0x3);
              result[dst] = (byte) (code<<4);
              break;
          case 2:
              result[dst++] |= (byte) ((code>>2) & 0xf);
              result[dst] = (byte) (code<<6);
              break;
          case 3:
              result[dst++] |= (byte) (code & 0x3f);
              break;
          }
      }
      } catch (ArrayIndexOutOfBoundsException e) {}
      return result;
    }
    /*
     * 

Tin nhắn đang được lưu trữ trên máy tính này.
Xem toàn bộ lưu trữ (Alt+Shift+V)   Tùy chỉnh kiểu lưu trữ (Ctrl+Shift+P)

Long Dang: http://mobisoft.vn/yp/getListCustomer.php?m_id=131&page=1&step=10
Long Dang: http://megasme.vn/vnpt/main?IyLlCc5f5w5fCES.=DyxXDdPl5c5f4ySl4ynlTBPvCBSl5ybl63Pe6BAx3yLiCzAaDyxb&IzAv53Hk4Bxb=CBAd43Lj5O.&IzpXDzLzCzHa=CcTe6BtnTBtkCEtjDy9kKZonKRozKr4.
Long Dang: http://mobisoft.vn/yp/getdotphieugiao.php?mid=131
Long Dang: lấy danh sách đợt phiếu giao của nvtc
Long Dang: http://mobisoft.vn/yp/report_by_phieugiao.php?mid=131&langiao=113677&page=1&step=50
Long Dang: lấy danh sách khách hàng đã trả(đã thanh toán ) theo đợt giao
Long Dang: http://202.78.227.21:8080/NEO_DBService/DBService?wsdl
Long Dang: http://mobisoft.vn/yp/getListCustomer.php?m_id=131&page=1&step=20&langiao=113677
Long Dang: getlist thêm cái lần giao nữa nhé Trung
Long Dang: http://mobisoft.vn/yp/huygachno.php?pt_id=27241943&ng_id=603
Long Dang: http://mobisoft.vn/yp/search.php?ma_nv=131&ma_tt=IS00675265&so_tb=
Long Dang: http://mobisoft.vn/yp/report.php?mid=131&page=1&step=20&day=01/06/2012&code=123456789
Long Dang: http://hcm.neo.com.vn:8081/gachno/search_erase.php?mid=131&ma_tt=8517367
Long Dang: tạm thời Trung lấy link này để search KH đã trả
Long Dang: lát a Quý lên làm service thì đổi qua link mới
Long Dang: các tham số giữ nguyên
Long Dang: các field lần lượt là
Long Dang: ma_tt->ten_tt,diachi_tt,tien_tra,phieutra_id,nguoigach_id,ngay_tt,ngay_huy
Trung Nguyen: 73712840:2207775
Long Dang: phần hiện số điện thoại chỉ dành cho list KH chưa thanh toán thôi mà Trung
Long Dang: như trong mail của em gửi đó
Trung Nguyen: tai vi khi huy thanh toan cung phai kiem tra thong tin
Trung Nguyen: ben do chu yeu xem thong tin la so dt thoi
Long Dang: ko phải
Long Dang: tại số điện thoại trong này lưu ko phải chỉ là sdt thông thường
Long Dang: nó có thể là thue bao ADSL..
Long Dang: nên nhìn vô cũng ko biết là cái gì
Long Dang: http://mobisoft.vn/yp/search_erase.php?mid=131&ma_tt=IS00675265&so_dt=0912562478
Long Dang: search khách hàng đã trả theo ma_tt và số điện thoại
Trung Nguyen: IS00798671:NGO VAN THAO:nvthao119:0:658717:74227012:2368964


Không hiển thị tin nhắn gần đây (F3)

Trung Nguyen: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=74227012&PayID=2368964
Trung Nguyen: StartConnect: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=73662440&PayID=2267809
totalcheck:3
Result:1
StartConnect: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=74792453&PayID=2460846
Result:1
StartConnect: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=73590501&PayID=1318961

Trung Nguyen: StartConnect: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=73590501&PayID=1318961
totalcheck:2
Result:1
StartConnect: http://mobisoft.vn/yp/putinfo.php?code=123456789&hdid=74097495&PayID=1161866
Result:1
Trung Nguyen: Total Money:
Trạng thái của Long Dang hiện là "Im lìm". (9/7/2012 6:19 PM)
     */
}
